#ifndef _SYMTABLE_H
#define _SYMTABLE_H

struct Attrib
{
	bool val;
};

struct Entry
{
	string *lexemme;
	Attrib attrib;
	int token;
};

class SymTable
{
	private:
		static SymTable *myInstance;
		vector<Entry *> entries;
		int counter;
		SymTable(void) {};
		SymTable(SymTable &) {};
		SymTable& operator=(SymTable &) {}; 
	public:
		void print(void);
		static SymTable * getMyInstance(void);
		static void destroyMyInstance(void);
		int generate(void);
		int getCounter(void);
		void setCounter(int newCounter);
		int lookup(const char *s);
		int insert(const char *s, int token);
		int tokenForEntryAtIndex(int index);
		int ValueForEntryAtIndex(int index);
		const char* lexemmeForEntryAtIndex(int index);
		int deleteEntryAtIndex(int index);
		int deleteEntriesInRange(int start, int end);
};

#endif
